package com.easylinkin.linkappapi.common.exceptions;


/***
 * 异常枚举
 * @author tongjie
 * modify  by tongjie 2021-1-8

 * 枚举了一些常用API操作码
 *
 *
 * 大类
 *            4xxxx 客户端错误
 *            5xxxx 服务端错误
 *
 * 按照模块细化分类
 *             401xx  设备模块
 *             402xx  空间区域模块
 *             403xx  ....
 *             ..........
 *
 *            40000  参数缺失或不符合长度要求一般性参数错误，或暂未分类的客户端错误笼统性概括
 *            50000  服务端错误笼统性概括
 */
public interface ExceptionEnum extends StandardException {

    /***
     * 通用异常枚举
     * @author chencq
     * @date 2019-02-26
     * modify  by tongjie 2021-1-8
     */
    enum CommonExceptionEnum implements StandardException {

        /**
         * 未知异常
         */
        UNKNOWN_EXCEPTION("ER001", "未知异常", "warn"),

        /**
         * 系统错误
         */
        SYSTEM_ERROR("ER002", "系统错误", "error"),
        /**
         * 空指针异常
         */
        NULL_EXCEPTION_ERROR("ER003", "空指针异常", "null"),

        /**
         * 文件读异常
         */
        FILE_READ_ERROR("ER004", "文件读解析异常", "error"),

        /**
         * 查询记录不存在
         */
        RECORD_NOT_EXISTS_ERROR("ER006", "没有查询到数据", "error"),

        PARAMETER_ERROR("ER007", "参数错误", "error"),

        DATA_CHECK_ERROR("ER010", "数据验证错误", "error"),
        /**
         * 服务错误
         */
        EXCEPTION_CODE_500("ER500", "服务错误", "error"),

        /**
         * 调用外部接口异常
         */
        EXTERNAL_INTERFACE_ERROR("EXTERNAL_INTERFACE_ER001", "外部接口异常", "error");


        private String errorCode;
        private String errorMsg;
        private String errorType;


        CommonExceptionEnum(String errorCode, String errorMsg, String errorType) {
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
            this.errorType = errorType;
        }


        /**
         * Getter method for property <tt>errorCode</tt>.
         *
         * @return property value of errorCode
         */
        @Override
        public String getErrorCode() {
            return errorCode;
        }

        /**
         * Getter method for property <tt>errorMsg</tt>.
         *
         * @return property value of errorMsg
         */
        @Override
        public String getErrorMsg() {
            return errorMsg;
        }
    }


    /**
     * 设备模块的异常枚举 错误码 401xx 
     */
    enum SpaceExceptionEnum implements ExceptionEnum {

        /**
         * 空间名称已存在
         */
        SPACE_NAME_EXIST("40201", "空间名称已存在");


        private String errorCode;

        private String errorMsg;

        SpaceExceptionEnum(String errorCode, String errorMsg) {
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
        }

        @Override
        public String getErrorCode() {
            return errorCode;
        }

        @Override
        public String getErrorMsg() {
            return errorMsg;
        }
    }

}
